<?php
require_once(dirname(__FILE__)."/../lib/Loader.php");
cfgload("strings/renderer");
cfgload("defines");
cfgload("dd");

cload("Smarty.smartyRenderer");
cload("requestProcessor");
cload("templatesData.templateRow");
cload("itunes.itunesRow");
cload("itunes.ItunesInfo");
cload("kinopoisk.kinoPoiskFilm");
cload("database.dbquery");
cload("advRating.advRatingConvertor");
cload("distr.distribution");
cload("dd.ddrow");

//$dbh = dbh();

/**
 * Класс рендеринга выходных данных вильма или раздачи
 * в запросе должно быть
 * filmid - рендерим фильм
 * distrid - рендерим раздачу
 * tpl - id шаблона для рендеринга
 */


class renderDBTemplate extends smartyRenderer {
    protected $_vars;
    protected $_dbh;
    protected $_isJson;
    protected $_jsonArr;
    
    function __construct($dbh) {
        parent::__construct();
        
        $this->_dbh = $dbh;
        
        $this->_vars = new object();
        
        // Получим возможные данные из запроса
        $this->_vars->set("filmid", requestProcessor::getVar("filmid", 0));
        $this->_vars->set("distrid", requestProcessor::getVar("distrid", 0));
        $this->_vars->set("tpl", requestProcessor::getVar("tpl", 0));
        $this->_vars->set("debug", requestProcessor::getVar("debug", 0));
        
        $this->_isJson = requestProcessor::getVar("json", 0);
        $this->_jsonArr = array();
        
        $this->_jsonArr["SCRIPT_URL"] = $_SERVER['SCRIPT_NAME'];
        $this->_jsonArr["DOPDATA_FOR_FILM"] = DOPDATA_FOR_FILM;
        $this->_jsonArr["DOPDATA_FOR_DISTR"] = DOPDATA_FOR_DISTR;
        
        $this->_jsonArr["DOPDATA_TYPES"] = _dd_Types();
        $this->_jsonArr["DOPDATA_TYPES_INV"] = _dd_TypesInv();
        
        
    }
    
    function render() {
        // Проверим, есть ли у нас шаблон с указанным id
        $template = new templateRow($this->_dbh, $this->_vars->get("tpl"));
        $tplData = "";
        
        if(!$template->load()) {
            // Шаблон загрузить не удалось
            return $this->getError(stringsRenderer::string("TEMPLATE_NOT_FOUND"), TPL_ERR_FATAL);
        }
        
        // Теперь определим сто за шаблон мы будем генерить
        // сначала проверим, не фильм ли
        if($this->_vars->get("filmid") > 0) {
            $tplData = $this->renderFilm($template);
            $this->_jsonArr["mode"] = "film";
        }
        
        // Возможно будем рендерить шаблон раздачи
        if($this->_vars->get("distrid") > 0) {
            $tplData = $this->renderDistr($template);
            $this->_jsonArr["mode"] = "distr";
        }
        
        if($this->_isJson == 1) return json_encode($this->_jsonArr);
        if($this->_isJson == 2) return _print_r($this->_jsonArr);
        
        if($tplData!="") {
            $this->assign("tplData", $tplData);
            return $this->fetch("renderDBtemplate.tpl");
        };
        
        // Видимо нет входных данных. вернём информацию о ошибке
        return $this->getError(stringsRenderer::string("FILMDISTR_ID_IS_NULL"));
    }
    
    protected function setItunes($filmid) {
        $itunes = array();
            
        $sql = new dbquery($this->_dbh);
        $sql->select()->from("filmsItunes")->where("kpId=".$filmid);
        $sth = $this->_dbh->query($sql);
        while($fa = $this->_dbh->raw_fetch_array($sth)) {
            $row = new object($fa);

            $sort_name = preg_replace("/^The /i", "", $row->get("trackName"));
            $sort_name = preg_replace("/^A /i", "", $sort_name);
                
            $row->set("SortName", $sort_name);
                
            $convertor = new advRatingConvertor($this->_dbh, $row->get("country"));
            $convertor = $convertor->load($row->get("contentAdvisoryRating"));
                
            $row->set("contentAdvisoryRatingC", "n/a");
                
            if($convertor != null)
                $row->set("contentAdvisoryRatingC", $convertor->get("converted"));
            
            $row->set("bigposter", ItunesInfo::posterURLProcessor($row->get("artworkUrl30")));
                
            $itunes[$row->get("country")] = $row->getElements();
            
        }
        $this->assign("itunes", $itunes);
        $this->_jsonArr["itunes"] = $itunes;
            
        if($this->_vars->get("debug")) _print_r($itunes);
    }

    protected function setKinopoisk($filmid) {
        $kino = new kinoPoiskFilm($this->_dbh, $filmid);
            
        $release_day = $kino->get("premiere_world");
            
        foreach(_mounth_rus_eng_array() as $r_m=>$e_m) {
            $release_day = str_replace($r_m, $e_m, $release_day);
        };
            
        $kino->set("ReleaseTimeStamp", $release_day);
        $kino->set("longDescriptionN", str_replace("\n", " ", $kino->get("longDescription")));
        $kino->set("longDescriptionN", str_replace("\r", "", $kino->get("longDescriptionN")));
            
        $this->assign("kinopoisk", $kino->getElements());
        $this->_jsonArr["kinopoisk"] = $kino->getElements();
        
        $film_dd = new ddrow($this->_dbh, DOPDATA_FOR_FILM, DOPDATA_FOR_FILM.":".$filmid);
        $this->assign("FILM_DD", $film_dd->getDataHTML());
        $this->_jsonArr["kinopoisk_dd"] = $film_dd->getDataHTML();

        if($this->_vars->get("debug")) _print_r($film_dd->getData());
        if($this->_vars->get("debug")) _print_r($kino->getElements());
    }

    protected function renderFilm($tpl) {
        $tpl_data = $tpl->get("value");
        
        if($tpl->get("itunes")==1) {
            // Нужны данные из БД itunes
            $this->setItunes($this->_vars->get("filmid"));
        }
        
        if($tpl->get("kinopoisk")==1) {
            // Нужны данные из кинопоиска
            $this->setKinopoisk($this->_vars->get("filmid"));
        }
        
        return $this->fetch("string:".$tpl_data);
    }
    
    protected function renderDistr($tpl) {
        $tpl_data = $tpl->get("value");
        
        
        $distr = new distribution($this->_dbh, $this->_vars->get("distrid"));
        $distr->load();
        $filmid = $distr->get("filmid");
        
        $this->assign("DISTR", $distr->getElements());
        $this->_jsonArr["distr"] = $distr->getElements();
        //_print_r($distr->getElements());
        
        $distr_dd = new ddrow($this->_dbh, DOPDATA_FOR_DISTR, DOPDATA_FOR_DISTR.":".$this->_vars->get("distrid"));
        
        $this->assign("DISTR_DD", $distr_dd->getDataHTML());
        $this->_jsonArr["distr_dd"] = $distr->getElements();
        //_print_r($distr_dd->getData());
        
        if($tpl->get("itunes")==1) {
            // Нужны данные из БД itunes
            $this->setItunes($filmid);
        }
        
        if($tpl->get("kinopoisk")==1) {
            // Нужны данные из кинопоиска
            $this->setKinopoisk($filmid);
        }
        
        return $this->fetch("string:".$tpl_data);
    }
}

?>